\section{SCP：一种联邦拜占庭一致性协议}\label{sec:scp}

本节给出了恒星共识协议(Stellar Consensus Protocol，SCP)。高层次上来讲，SCP包含两个子协议：提名协议和表决协议。表决协议产生用于{\slot}的候选值。如果运行时间足够长，它将在每个完好节点处产生相同的候选值集合，这意味着节点可以用一种确定性的方式为{\slot}产生合成值。然而这里有两大注意事项。首先，节点无法知道提名协议何时达到收敛点。其次，即使在收敛之后，恶性行为节点或许有能力多次重置提名过程。

当节点猜测到提名协议已经收敛后，它们执行表决协议，这采用了联邦选举来提交或终止与合成值相关联的表决。当节点同意提交一个表决时，将会为讨论中的{\slot}具体化和表决相关联的值。当它们同意终止一个表决时，表决的值变得不再相关。如果一个表决在某个状态下被卡住了(在这种情形下一个或多个完好节点不能够提交或终止该表决)，那么节点尝试重新使用更高的表决；它们将新的表决和被卡住的表决一样的值相关联，以防止任何节点误认为被卡住的表决被提交了。直观上来说，安全性来源于确保所有被卡住的或已提交的表决和相同的值相关联。存活性由这一事实保证：一个被卡住的表决可以通过转向更高的表决来中和。

本节的剩余部分给出了提名协议和表决协议。它们各自先以概念性语句描述，然后用带有表示一系列概念性语句的消息的具体协议描述。最终，第\ref{sec:scp_correct}说明了协议的正确性。SCP认为每个{\slot}是完全独立的且可被看成是一个单一{\slot}共识协议中的许多分开的实例(和Paxos算法~\cite{Lamport:1998:PP:279227.279229}中的``单一法令议会''(single-decree synod)类似)。尽管我们的大多讨论隐式地表述{\slot}，我们必须总在一个特定的{\slot}的环境下解释例如候选值和表决等概念。

\input{tex/6-scp-s1}
\input{tex/6-scp-s2}
\input{tex/6-scp-s3}